以前の記事, エルガマル暗号では, エルガマル暗号に関する諸々の前提の説明と, その実装について示した. 同エントリ内で, フェルマーの小定理1については取り扱ったものの, その一般形であるオイラーの定理およびカーマイケルの定理について特に触れなかったため, 本エントリでそれらに関してまとめる. しばしば値の確認には, 簡単のため Haskell を使う.
オイラーの定理
いま, フェルマーテストを定義したとき, FTn(a) をパスするには(すなわち, フェルマーの小定理が示す合同式が成り立つには), 要件として, 既約剰余類郡 Z∗n の各要素と ∃a ∈Z の積が全て異なり, modn の既約代表系のすべての積と合同でなければならない. たとえば, 法 n=8 による合同関係で構成する剰余類の完全代表系2は 0,1,2,3,4,5,6,7 であるが, a=2 としてしまうと, 既約剰余類郡が構成できていないので, 次のようにしても完全代表系が得られない(積をわざわざ示していないが, 非合同でないことは, 各要素の積が全て異なっていない時点で明白である).
Prelude> [x * 2 `rem` 8 | x <- [0..7]]
[0,2,4,6,0,2,4,6]
そこで, 先に述べた剰余類の既約代表系を考える. これは ϕ(8)=4 個3で, 1,3,5,7 である. これを同じように, {1⋅a, 3⋅a, 5⋅a, 7⋅a} とし, 先の要件を確認すると, この補題2より, mod8 で全体として {1,3,5,7} と一致していて, 1⋅3⋅5⋅7≡1⋅3⋅5⋅7⋅a4(mod8)
がいえる4.
*Main> euler'sTheorem n = [a `modExp` (totient n) $ n | a <- [2..], gcd a n == 1]
*Main> all (==1) $ take 100 $ euler'sTheorem 8
True
n が素数 p であるとき, ϕ(p)=p−1 で, フェルマーの小定理1となる5.
ラグランジュの定理
いま述べたオイラーの定理は, ラグランジュの定理を使っても証明できる. ラグランジュの定理は,
である.
証明: 有限郡 G の部分郡 H による類別が G=r⋃iaiH であるとき, ∣G∣=r∣H∣ といえる. この r は r=∣G:H∣ そのものなので, ∣G∣ = ∣G:H∣∣H∣. ◻
ごく直感的な定理である. これを使えば, オイラーの定理は次のように証明できる.
補題1: 有限郡 G とその元 ∀g∈G に対し, g∣G∣=e. e∈G は単位元.
証明: 巡回部分郡 H=<g> の元 g の位数 ∣H∣ は, 巡回して gi=e となる最小の i∈N であるといえる. すなわち g∣H∣=e
オイラーの定理の証明: オイラーの定理を仮定したとき, 脚注2より剰余類 ¯a は法 n に関する既約剰余類郡 Z∗n に含まれる. ∣Z∗n∣=ϕ(n) だから補題 1 より ¯aϕ(n)=¯aϕ(n)=¯1. ◻
カーマイケルの定理
オイラーの定理で用いる ϕ 関数は, am≡1(modn) (m∈N,gcd(a,n)=1 を成立させる最小の整数 m を持ち得ない. たとえば, n=8 では, 先の通り確かに m=ϕ(8)=4 で合同式が満足できたが, m=2 としても, これを満足できる.
*Main> all (==1) $ take 100 $ [a `modExp` 2 $ 8 | a <- [2..], gcd a 8 == 1]
True
カーマイケルの λ 関数は, 与えられた整数 n に対して同合同式を満足する最小の m を定義より自明に与える.
実装して確かめよう.
*Main> let carmichael'sLambda n = head [k | k <- [1..], and [(m `modExp` k $ n) < 2 | m <- [1..n] gcd m n < 2]]
*Main> let carmichael'sTheorem n = [a `modExp` (carmichael'sLambda n) $ n | a <- [2..], gcd a n == 1]
*Main> all (==1) $ take 100 $ carmichael'sTheorem 8
True
-
補足. 郡 G とその部分郡 H があるとき, H は郡であるから単位元 e∈H を含む. よって, ∃a∈G の剰余類を aH={ah∣h∈H} としたとき(簡単のため, 左剰余類として式をおいたが, これに深い意味はない.), a=ae∈aH より a∈aH である. この a を剰余類 aH の代表という. また郡 G は, 異なる ai を代表とした剰余類 aiH によって類別できる(G=⋃iaiH). この ∣G:H∣ 個の類別に対して, 各剰余類から代表の元を取り, 構成した集合を, G の H に対する代表系という. ↩↩
-
ここで, ϕ は, オイラーのトーシェント関数. ↩
-
コード内の
totient
とmodExp
は, それぞれ以前の投稿のうち, オイラーのトーシェント関数の実装部分と, カーマイケル数を得るための実装を利用. ↩ -
この補足は冗長的かもしれないが, n が素数 p である場合, Z∗p が構成されるから, これから取った代表は素数 p と互いに素であることから, 既約代表である. この事実も, 一般に (1) から (2) へのような式変形が実行できることとの整合を示す. ↩